iT邦幫忙

2024 iThome 鐵人賽

DAY 16
0
Modern Web

Go 快 Go 高效: 從基礎語法到現代Web應用開發系列 第 16

【Day16】連接資料庫 I | GORM & PostgresSQL 基本認識

  • 分享至 

  • xImage
  •  

GORM 是一個用於 Go 語言的物件關聯映射(Object Relational Mapping,簡稱 ORM)庫,主要用來將 Go 程式中的結構體(struct)與資料庫中的表格(table)進行映射。它可以幫助我們更方便地操作資料庫,而不用直接撰寫 SQL 語句。

這裡我們也可以參考官方文擋的介紹(📎參考連結)

  • 那他流程會像下面這樣
    https://ithelp.ithome.com.tw/upload/images/20240924/201618504JYwC00jUG.png

好那我們知道 GORM 是用來更方便的操作資料庫,那接著我們來介紹下一篇會用到的 PostgreSQL 吧!

https://ithelp.ithome.com.tw/upload/images/20240924/20161850MmyN8tHGqx.png

特性 PostgreSQL MySQL
開源性 完全開源 完全開源
資料庫技術 物件型關聯式資料庫管理系統 純粹的關聯式資料庫管理系統
ACID 支援 完全支援 部分支持(MyISAM 不支援)
擴展性 高度擴展,支援自定義數據型別、函數等 擴展性有限,插件化但不如 PostgreSQL 強大
數據型別 支援 JSONB、HSTORE、ARRAY 等複雜數據型別 支援 JSON,但對其他複雜型別支援較弱
全文檢索 內建全文檢索 需使用外部插件來實現
查詢優化 查詢優化器強大,支援複雜查詢如 CTE 查詢優化器較為基本,對複雜查詢支持不足
儲存引擎 單一引擎,設計專注一致性與性能 支援多個儲存引擎(如 InnoDB、MyISAM)
複製與高可用性 支援同步和非同步複製,進階分區支持 支援主從複製,Galera Cluster 支援同步複製
安全性 支援行級安全性與詳細權限控制 不支援行級安全性,權限控制較粗粒度
性能 對讀多寫少的場景效能優異 在讀寫比例均衡或寫多的情境中效能不錯
初學者難度 略高,因為功能較豐富 相對簡單,因為功能較少

其實可以看出 Postgres 整體上的豐富度都是更好的選擇,雖然性能略輸給 MySQL,但是除非你有特殊工作需求,或是你服務的是全球性的大型企業,但其實像 Instagram 也是使用 Postgres 開發的,所以其實也不太準確就是了。
而且 Postgres 還能夠透過分片來實現水平擴展,部分場景下還能取代 redis 和 kafka 的功能,所以我覺得選擇使用 PostgreSQL 算是一個蠻不錯的選擇。


安裝 PostgreSQL

以上操作皆在 Mac 上執行

  • 配置環境
# 安裝 PostgreSQL
brew install postgresql

# 啟動 PostgreSQL 服務
brew services start postgresql

# 初始化數據庫
sudo mkdir -p /usr/local/var/postgres
sudo chown -R $(whoami) /usr/local/var/postgres
initdb /usr/local/var/postgres

# 安裝 Homebrew 的 services 插件
brew tap homebrew/services
  • 這是我們服務的開啟跟關閉方式
# 啟動 PostgreSQL 服務
brew services start postgresql

# 停止服務
brew services stop postgresql

# 重新啟動服務
brew services restart postgresql
# 創建一個名為 postgres 的角色並賦予其超級用戶權限
createuser -s postgres

通常在初次安裝並初始化 PostgreSQL 後,會自動創建一個名為 postgres 的超級用戶角色。如果這個角色未被創建,才需要手動創建一個。

  • 連接到 PostgreSQL
psql postgres

# 在連接時使用不同的<角色名稱> : <資料庫名稱>
psql -U postgres postgres

# 查詢 PostgreSQL 的角色
psql -c "\du"

https://ithelp.ithome.com.tw/upload/images/20240924/20161850xFziSnjLUX.png

然後我們要來創建一個資料庫

psql postgres

# 創建一個資料庫叫 postgres
CREATE DATABASE postgres;

# 賦予用戶權限
GRANT ALL PRIVILEGES ON DATABASE postgres TO postgres;

然後我們再開一個 Terminal 來確保有正常連接上我們的資料庫。

# -d <資料庫名稱> : -U <用戶名稱>
psql -d postgres -U postgres

那如果想從圖形化介面查看我們資料庫的狀態,我個人是習慣用 pgAdmin 或是 TablePlus 來做查看資料表的動作,那我用 pgAdmin 做示範看到下面這樣就算成功了。

https://ithelp.ithome.com.tw/upload/images/20240924/20161850LBlsnxTbGQ.png


上一篇
【Day15】多線程/平行化處理 II | WaitGroup 與 Caching 應用
下一篇
【Day17】連接資料庫 II | 使用 GORM 來與 PostgreSQL 互動
系列文
Go 快 Go 高效: 從基礎語法到現代Web應用開發30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言